<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>index11-基础加强</title>
</head>
<body>
<script type="text/javascript">

    // 在一个函数内部再定义一个函数，js中可行，java不行
    // 可以将内部函数做为外部函数的返回值
    // function f1(){
    //     function f2(){
    //         console.log("内部函数")
    //     }
    //     f2();
    // }
    // f1();

    // function f1(){
    //     function f2(){
    //         console.log("内部函数被执行")
    //     }
    //     // 返回值是内部函数的引用
    //     return f2;
    // }
    // var f = f1(); // f获取到是f2
    // f();

    // 闭包:在一个函数内部可以访问另一个函数内部变量
    // function f1(){
    //     var a = 10;
    //     function f2(){
    //         console.log(a);
    //     }
    //     return f2;
    // }
    // var f = f1();
    // f();

    // 全局作用域：直接放在script标签中声明变量都属于全局作用域
    // 局部作用域：定义在函数内部的变量(必须加var)属于局部作用域中，并且跨局部作用域不能访问其他局部作用域中的变量
    // 块级作用域：代码块，然后在js中通过var声明的变量是没有块级作用域的概念
    // var a = 10;
    // console.log(a);
    //
    // function f(){
    //     // console.log(a);
    //     console.log(window.a);
    // }
    // f();

    // function f(){
    //     // var a = 10; // 属于局部作用域
    //     a = 10; // 属于隐式全局变量
    //     console.log(a);
    // }
    // f();
    // console.log(a);

    // {}  if(){}  for() {}  while(){}
    // {
    //     var a = 10;
    //     console.log(a);
    // }
    // console.log(a);
    // for (var i = 0; i< 5; i++) {
    //     console.log(i);
    // }
    // console.log(i);

    // 作用域链
    // var a = 10; // 全局作用域,0层作用域
    function f1(){
        // var a = 20; // 1层作用域
        function f2(){
            // var a = 30; // 2层作用域
            function f3(){
                // var a = 40; // 3层作用域
                console.log(a);
            }
            f3()
        }
        f2()
    }
    f1();


</script>
</body>
</html>